It is known to provide data processing systems in which data from a given memory address may be stored at multiple locations. As an example, in a symmetric multi-processing (SMP) system each of the processors may have a local cache memory storing a copy of an item of data. If one of these processors updates its local copy of that item of data, then the other copies of that data item stored in other local caches, and within the main memory system, will be out-of-date. In order to deal with this issue, it is known to provide such systems with snoop mechanisms whereby, for example, when a processor is fetching an item of data (such as a cache line into its local cache), then snoop requests may be broadcast within the system to determine where the most up-to-date copy of that data item exists. Thereafter snoop request sent between local caches ensure the necessary degree of coherency is maintained between local copies. Broadcast snoop requests are also associated with, for example, coherent write accesses and cache maintenance operations.
While such snoop mechanisms are effective in maintaining data consistency/coherence, there is a problem that as the number of locations at which a data item can be stored increases and the number of potential consumers of those data items increases, then there is a geometric increase in the amount of snoop request traffic that is generated. One approach to reduces this snoop request traffic is to use snoop filters. Various types of snoop filter are known such, as Bloom filters, exclusive snoop directories and inclusive snoop directories. An exclusive snoop directory stores data specifying which regions of memory are known not to contain any shared data that is stored in more than one location. A hit within an exclusive snoop directory indicates that data from the memory address concerned is not shared (i.e. not already present within both the main memory and a cache memory) and accordingly may be safely fetched from the main memory without raising a coherence issue. An inclusive snoop filter stores data indicating which memory addresses correspond to data items that are shared (e.g. stored within at least one local cache memory as well as within the main memory). A hit within an inclusive snoop directory indicates that the corresponding data may not simply be fetched from the main memory and a check needs to be made as to whether or not a more up-to-date copy of that data is stored elsewhere within the system in order to ensure proper data coherence.
A problem with snoop filters is to reduce the amount of overhead that they incur in terms of circuit area, dynamic power consumption and static power consumption (e.g. leakage). In the case of exclusive snoop directories a typical system normally has an overwhelming proportion of its memory addresses corresponding to data that is not shared rather than data that is shared. Thus, in order to obtain full coverage of the memory address space at a level of granularity that does not introduce too much imprecision resulting in false an unacceptable level of false requirements for snoop requests, a disadvantageously large amount of storage needs to be provided for an exclusive snoop directory. Such a large amount of storage consumes circuit area thereby increasing cost as well as incurring significant dynamic and static power consumption penalties. In the case of an inclusive snoop directory, as this is required to track the data stored within all of the local stores (e.g. cache memories) of a system, it too may incur a significant area and power consumption cost as the size of the local data stores within the system increases.